import { defineStore } from 'pinia'
import { providerList } from '../../testData'

// 定义每个提供商的配置接口
interface ProviderConfig {
  [key: string]: string
}

/**
 * AI提供商配置Store
 * 用于管理不同AI提供商的API密钥等配置信息
 * 支持本地存储持久化
 */
const useProviderConfigStore = defineStore('providerConfig', {
  state: () => ({
    // 所有提供商的配置
    configs: {} as Record<string, ProviderConfig>,
    // 提供商列表（从testData导入）
    providers: providerList
  }),

  getters: {
    /**
     * 获取指定提供商的配置
     * 使用方式: store.qianfan, store.dashscope 等
     */
    qianfan: state => state.configs['qianfan'] || getDefaultProviderConfig('qianfan'),
    dashscope: state => state.configs['dashscope'] || getDefaultProviderConfig('dashscope'),
    deepseek: state => state.configs['deepseek'] || getDefaultProviderConfig('deepseek')
  },

  actions: {
    /**
     * 初始化配置，从localStorage加载已保存的配置
     */
    initConfig() {
      const savedConfig = localStorage.getItem('providerConfigs')
      if (savedConfig) {
        this.configs = JSON.parse(savedConfig)
      } else {
        // 初始化默认空配置
        this.providers.forEach(provider => {
          if (!this.configs[provider.name]) {
            this.configs[provider.name] = getDefaultProviderConfig(provider.name)
          }
        })
        this.saveToLocalStorage()
      }
    },

    /**
     * 获取指定提供商的配置
     * @param providerName 提供商名称
     * @returns 提供商配置
     */
    getConfig(providerName: string): ProviderConfig {
      return this.configs[providerName] || getDefaultProviderConfig(providerName)
    },

    /**
     * 获取指定提供商的特定配置项
     * @param providerName 提供商名称
     * @param key 配置项键名
     * @returns 配置项值
     */
    getConfigItem(providerName: string, key: string): string {
      const config = this.getConfig(providerName)
      return config[key] || ''
    },

    /**
     * 更新指定提供商的配置
     * @param providerName 提供商名称
     * @param config 新的配置
     */
    updateConfig(providerName: string, config: ProviderConfig) {
      this.configs[providerName] = {
        ...this.getConfig(providerName),
        ...config
      }
      this.saveToLocalStorage()
    },

    /**
     * 更新指定提供商的单个配置项
     * @param providerName 提供商名称
     * @param key 配置项键名
     * @param value 配置项值
     */
    updateConfigItem(providerName: string, key: string, value: string) {
      const config = { ...this.getConfig(providerName) }
      config[key] = value
      this.updateConfig(providerName, config)
    },

    /**
     * 保存配置到localStorage
     */
    saveToLocalStorage() {
      localStorage.setItem('providerConfigs', JSON.stringify(this.configs))
    },

    /**
     * 获取指定提供商的表单字段配置
     * @param providerName 提供商名称
     * @returns 表单字段配置数组
     */
    getFormFields(providerName: string): Array<{ key: string; label: string; type: string }> {
      switch (providerName) {
        case 'qianfan':
          return [
            { key: 'accessKey', label: 'Access Key', type: 'text' },
            { key: 'secretKey', label: 'Secret Key', type: 'password' }
          ]
        case 'dashscope':
          return [
            { key: 'apiKey', label: 'API Key', type: 'password' },
            { key: 'baseURL', label: 'Base URL (可选)', type: 'text' }
          ]
        case 'deepseek':
          return [
            { key: 'apiKey', label: 'API Key', type: 'password' },
            { key: 'baseURL', label: 'Base URL', type: 'text' }
          ]
        default:
          return []
      }
    }
  }
})

/**
 * 获取指定提供商的默认配置
 * 根据各提供商实际实现的构造函数参数设置默认配置
 * @param providerName 提供商名称
 * @returns 默认配置对象
 */
function getDefaultProviderConfig(providerName: string): ProviderConfig {
  switch (providerName) {
    case 'qianfan':
      return {
        accessKey: '',
        secretKey: ''
      }
    case 'dashscope':
      return {
        apiKey: '',
        baseURL: ''
      }
    case 'deepseek':
      return {
        apiKey: '',
        baseURL: ''
      }
    default:
      return {}
  }
}

export default useProviderConfigStore
